5.12. Синтаксис
Синтаксис
Синтаксис Groovy значительно проще:
// Переменные без указания типа
def name = "Alice"
println "Hello, $name"
// Замыкания
def greet = { name -> println "Hello, $name" }
greet("Bob")
// Списки
def list = [1, 2, 3]
// Мапы
def map = [name: "John", age: 30]
// Работа с файлами
new File('test.txt').eachLine { line ->
println line
}
// Исключения
try {
def result = 1 / 0
} catch (e) {
println "Error: ${e.message}"
}
Фреймворки и инструменты Groovy:
| Название | Описание |
|---|---|
| Grails | MVC-фреймворк для веб-приложений, аналог Spring Boot, но более DSL-ориентированный. |
| Spock | Фреймворк для тестирования, позволяет писать читаемые и выразительные тесты. |
| Gradle | Система сборки, использующая Groovy (или Kotlin DSL) для описания билда. |
| Micronaut | Легковесный фреймворк для микросервисов, поддерживает Groovy. |
| Quarkus | Современный фреймворк для GraalVM и контейнеров, поддерживает Groovy. |
| Geb | Браузерный тестовый фреймворк на основе WebDriver. |
Сфера применения Groovy:
- Автоматизация задач – скрипты администрирования, обработка файлов, логов, данных.
- Тестирование – покрытие юнит-, интеграционного тестирования, использование Spock и JUnit.
- Веб-разработка – Grails, полноценный веб-фреймворк, и Micronaut, Quarkus его современные альтернативы.
- CI/CD – Jenkinsfile использует Groovy как основной DSL для описания пайплайнов.
- Сборка проектов – Gradle – де-факто стандарт для Android и Java-проектов.
- Обработка данных – Groovy удобен для скриптов обработки CSV, JSON, XML, SQL.
Важные классы и интерфейсы Groovy
| Класс, интерфейс | Назначение |
|---|---|
| Closure | Аналог лямбда-выражений в Java, используется в Groovy активно. |
Map, List, Set | Расширенные возможности работы с коллекциями. |
File, URL, URLConnection | Упрощённая работа с файлами и сетью. |
GroovyShell, GroovyScriptEngine | Для динамического исполнения Groovy-скриптов. |
Eval | Вычисление строкового выражения (например, Eval.x(2, 'x + 1')). |
Expando | Динамический объект, можно добавлять поля и методы на лету. |
MetaClass | Для изменения поведения классов на лету. |
DataSet | Для работы с SQL-запросами и представлениями. |
MarkupBuilder, StreamingMarkupBuilder | Генерация XML/HTML. |
JsonSlurper, JsonOutput | Чтение и запись JSON. |
XmlSlurper, XmlNodePrinter | Парсинг и генерация XML. |
Примеры часто встречающихся задач и решений:
- Парсинг JSON:
def json = '{"name":"Alice","age":25}'
def data = new groovy.json.JsonSlurper().parseText(json)
println data.name // Alice
- Запись JSON:
def data = [name: "Bob", age: 30]
def json = new groovy.json.JsonOutput().toJson(data)
println json
- Чтение XML:
def xml = '''
<people>
<person name="John"/>
</people>'''
def root = new XmlSlurper().parseText(xml)
println root.person.@name
- Генерация HTML:
def html = new groovy.xml.MarkupBuilder()
html.html {
head { title "Page Title" }
body {
h1 "Hello from Groovy!"
}
}